import { WebPlugin } from '@capacitor/core';

import type { jwtPluginPlugin, FTPFileEnum, connectResult, Result, FTPListFileResult, FTPRetrieveFile, FTPParameters } from './definitions';


export class jwtPluginWeb extends WebPlugin implements jwtPluginPlugin {
    /**
     * 连接设备的接口，返回值是异步，需要根据设备响应后信息再返回
     * @param options 无实际作用，作保留用
     * @returns 
     */
    async connect(options: { params: string }): Promise<connectResult> {
        console.log('connect', options);
        throw this.unimplemented('Not implemented on web.');
    }

    /**
    * 调用设备拍照功能，拍照后照片保存在设备。返回值同样是异
    * @param options 无实际作用，作保留用
    * @returns 
    */
    async snap(options: { params: string }): Promise<connectResult> {
        // 如果没有默认值void状态就返回下面这段代码
        console.log('snap', options);
        throw this.unimplemented('Not implemented on web.');
    }

    /**
     * 调用设备录像功能，返回值同样是异步
     * @param starting boolean类型，true表示开始录像，false表示停止录像
     * @returns message中会识别是录像开始还是停止，但是只要响应了isSuccess就是true
     */
    async record(options: { starting: boolean }): Promise<connectResult> {
        console.log('record', options);
        // logic here
        throw this.unimplemented('Not implemented on web.');
    }

    /**
    * 断开设备连接
    * @param options 无实际作用，作保留用
    * @returns 无
    */
    async stopConnecting(options: { params: string }): Promise<void> {
        console.log('stopConnecting', options);
        // logic here
        console.log('connect', options);
    }

    /**
    * 设置参数到设备
    * 设备在连接的时候会返回初始化的参数，通过onParamsListener接口回调到前端，参数的字段是zfyParameters
    * @param options 无实际作用，作保留用
    * @returns 无
    */
    async setParameters(options: { params: Partial<FTPParameters> }): Promise<void> {
        // logic here
        console.log('setParameters', options);
    }

    /**
     * 打开FTP连接，一般来说原生在获取设备参数后会自动调用这个方法连接上设备的FTP
     * 账号密码和端口都是通过初始化的设备参数获取。同时开放此方法给前端自由调用
     * @param options 无实际作用，作保留用
     * @returns 返回连接是否成功的信息，isSuccess=true的时候成功
     */
    async ftpConnect(options: { params: string }): Promise<Result> {
        console.log('ftpConnect', options);
        // logic here
        throw this.unimplemented('Not implemented on web.');
    }

    /**
     * 获取设备上的文件，目前可查询图片和视频
     * @param FTPFileEnum FTPFileEnum枚举，PICTURE是图片类型，VIDEO是视频类型。注意枚举对应的值不要修改，用于查询
     * @returns 查询的结果对象列表，FileName 文件名 ，FileSize 文件大小，Times 文件的时间，FtpFilePath 文件在设备上被ftp查询到的地址
     */
    async ftpListFiles(options: { type: FTPFileEnum }): Promise<FTPListFileResult> {
        console.log('ftpListFiles', options);
        // logic here
        throw this.unimplemented('Not implemented on web.');
    }

    /**
     * 下载执法仪的文件到本机
     * @param fileName 保存到本地的文件名，注意这个文件名是可以自定义的，最后以前端命名的文件名保存 
     * @param ftpFilePath 需要下载的文件的FTP地址，由查询时候返回的FtpFilePath字段带出给前端
     * @returns localFilePath文件下载到本地的地址
     */
    async ftpRetrieveFile(options: { fileName: string, ftpFilePath: string }): Promise<FTPRetrieveFile> {
        console.log('ftpRetrieveFile', options);
        // logic here
        throw this.unimplemented('Not implemented on web.');
    }

    /**
     * 播放RTSP视频流，注意要连接设备后才能获取RTSP的地址（由原生获取，前端保证在连接后调用即可）
     * @param options 无实际作用，作保留用
     * @returns 失败返回原因，成功不返回
     */
    async playRTSP(options: { params: string }): Promise<void> {
        // logic here
        console.log('playRTSP', options);
    }


    /**
     * 停止播放RTSP，并释放资源，建议在应用退到后台的时候释放资源
     * @param options 无实际作用，作保留用
     * @returns 
     */
    async stopRTSP(options: { params: string }): Promise<void> {
        // logic here
        console.log('stopRTSP', options);
    }
}
